题目描述
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...
)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。
示例 1:
1 | 输入: n = 12 |
示例 2:
1 | 输入: n = 13 |
分析
这道题其实是非常简单的动态规划类问题,递推思路很清晰,但是使用python,会出现超时!
答案
1 | import math |
优化
本题的关键是完全平方数,因而并不需要对所有数进行判断是否是完全平方数,只需要从1开始递增,找到对应的1*1
,2*2
等等的完全平方数即可,这样裁剪了很多不必要的分支。
按照这种思路,本文的解法可以是:
1 | class Solution: |
但是这种方法使用python3仍然会超时,我们用Java重写了一遍,即可通过。
1 | class Solution { |